
        Een overzicht van mijn "gateway mapping" network idee

De records van mysensors.org lijken aardig op wat ikzelf wil doen. Behalve de
beveiliging, die laten ze over aan de hardware. Die in het geval van de nRF24
en de meeste andere beschikbare transceivers, geen beveiligings mogelijkheden
biedt (ze zeggennamelijk: dat doet de hardware wel)..
Voorlopig gebruik ik hun coderings protocol niet
maar het zal geen enkel probleem zijn dat later door te voeren. Ook kun je
zien dat daar wel degelijk goed over de functionaliteit nagedacht is.

Na wat te hebben gelezen over netwerken, kom ik er achter dat het door mij
bedachte netwerk type een "gateway mapping netwerk heet". De voordelen
daarvan zijn: Kleine vertraging, Hoge mobiliteit (verplaatsbaarheid), Hoge
efficiency. Als nadeel wordt de complexiteit genoemd.
Als je de nRF24 in Enhanced ShockBurst modus gebruikt, is deze gateway
methode ook het meest voor de hand liggend.

Het administratie byte lijkt bij "gateway mapping" overbodig te zijn. Echter
iets met prioriteiten doen, lijkt me wel van belang. De nodes zouden moeten
weten dat een brand- of inbraaksensor voorrang heeft!

Voor de command's heb ik voorlopig gekozen voor beschrijvende karakters.
dat maakt het van de grond krijgen (testen) wat eenvoudiger.


 ** Volgende stap experimenteren met dynamic payloads op de nRf24 **



Een overzicht van mijn record structuur 9 bytes bij zenden:

|Administratie|Bestemmings-node|Oorsprong-node|Sub-node|Commando|Data-0|Data-1|Data-2|Data-3|

Administratie 8-bits = pppp aaaa
    pppp = Prioriteit, 0= laagste t/m 15=hoogste
    aaaa = (Her)verzend code, 0=Direct van node, 15=Binnengekomen via 15 andere nodes
           (Voor het uitsluiten van dubbel binnen gekomen opdrachten)

Bestemmings-node:
    0 tot 255, waar moet dit pakket naartoe, handig als de node niet
    rechtstreeks bereikt kan worden. Slapende (sensor) nodes (boven de 127)
    kunnen alleen op eigen verzoek worden geadresseerd.

Oorsprong-node:
    0 tot 255, waar komt dit pakket vandaan, handig als je antwoord wilt geven.

Commando:
    0 tot 255, wat moet is het doel van dit pakket
    S = Scan naar nodes binnen je bereik
    I = Informatie over een node vragen (wie ben je)
    O = On (Aan)
    Q = Quit (Uit)
    A = Alles aan
    Z = Zero (Alles uit)
    D = Dimmer niveau
    R = Vraag huidige versleutelings methode op
    C = Conditie (de toestand of status van een node)
 --- Opties ---
    E = Geef nieuwe versleuteling door

Node-ID (type) informatie die via het I-commando opgevraagd kan worden:
    Van welk soort node komt de data.
    Het hoogste bit geeft aan aan of het een slapende of actieve node is:
    01 = Actieve node-1  (128 actieve nodes)
    80 = Slapende node-0 (128 Slapende nodes)
    * Betreffende de mogelijke node-ID's:
        00 = Meester node
        01 = Actuator digitaal (0 of 1 of bitrij bij meer uitgangen)
        02 = Dimmer analoog  (0-255)
        03 = 8-bit analoge sensor
        04 = 16-bit analoge sensor
        05 = Digitale sensor
        06 = Multicolor lamp (3 bytes van 0 tot 255)
             Extra taken worden geregeld via sub-nodes
        07 = Deurbel (0 of 1 of bitrij bij meerdere bellen)
        08 = Etc.
        8x = Niet actieve node (slapend)
        FF = Afstand bediening

Sub-node:
    Als er geen sub-node adressen zijn, bevat deze byte een nul.
    Dan bevat deze node maar n sub-node dat is hijzelf. Als er meerdere
    sub-node adressen zijn beginnen die te tellen vanaf 1, etc.
    Sub-node adres 1 adresseerd dus de tweede device die via deze node
    bereikbaar is. Dat kan handig zijn als er meerdere sensoren op een
    node gemonteerd zijn. Ook bruikbaar als protocol converter, Dan
    zetten we b.v. een 433 MHz zender in een node, die direkt meerdere
    433 MHz schakelaars bedient.

Data 0 t/m 3:
    Pakket van vier data bytes, niet altijd nodig maar, vereenvoudigt de opbouw.
    Byte-0 t/m 3 zijn data behorend bij een commando



Record structuur antwoord vanaf slaaf-node 9 bytes:

|Administratie|Bestemmings-node|Oorsprong-node|sub-node|Data-0|Data-1|Data-2|Data-3|Data4|

Administratie 8-bits = pppp aaaa
    pppp = Prioriteit, 0= laagste t/m 15=hoogste
    aaaa = (Her)verzend code, 0=Direct van node, 15=Binnengekomen via 15 andere nodes

Bestemmings-node:
    0 tot 255, waar moet dit pakket naartoe

Oorsprong-node:
    0 tot 255, waar komt dit pakket vandaan

Node (ID) adres (bestemming/oorsprong):
    Van welk soort node komt de data.
    Het hoogste bit geeft aan aan of het een slapende of actieve node is:
    01 = Actieve node-1  (128 actieve nodes)
    80 = Slapende node-0 (128 Slapende nodes)

Sub-node:
    Intern adres van de oorsprong node en/of bestemmings node.

Data 0 t/m 3:
    Pakket van vier data bytes, niet altijd nodig maar vereenvoudigt de opbouw.
    Byte-0 t/m 3 zijn data behorend bij een commando



Node soorten en mogelijke activiteit:

Elke actieve node moet de afstandbediening kunnen afhandelen!

Master-node functies:
    - Brug naar PC, Raspberry en/of zelfstandig (Protocol converter)
    - Start zelf een SCAN voor het opbouwen van het netwerk
    - Start verzamelen data over de slaaf-nodes
    - Heeft mogelijk prive functionaliteit (sensor/actuator/beeldscherm)
    - Laat gevonden slaaf-nodes zelf ook een netwerk- en infoscan doen
    - Verspreid netwerk info over alle nodes
    - Niet voor master bestemde pakketten doorsturen
    - Kan het netwerk (de)activeren
    - Beveiligings methode aan slapende node geven (onbeveiligd)

Actieve slaaf-node functies:
    - Prive functionaliteit (sensor/actuator/beeldscherm)
    - Node info afgeven
    - Netwerk structuur ontvangen en opslaan
    - Sub netwerk scan op verzoek van master
    - Sub info scan op verzoek van master
    - Stuurt niet voor slaaf-node bestemde pakketten doorsturen
    - Netwerk (de)activeren

Slapende slaaf-node functies:
    - Prive functionaliteit (sensor, etc.)
    - Scan naar contact nodes voor de netwerk verbinding
    - Gevonden info naar master-node versturen
    - Beveiligings methode opvragen bij (master)node

Afstandbediening, een draagbare slapende slaaf-node:
    - Prive functionaliteit (schakelaars, display, etc.)
    - Scan naar contact nodes voor netwerk verbinding
    - Gevonden info naar master-node versturen
    - Beveiligings methode opvragen bij (master)node
    - Netwerk update opvragen bij master-node



Gateway mapping netwerk dataformaat bij master & slaves:

Elke node krijgt een I2C-eeprom waarin de netwerkstructuur (GATEWAY-map)
opgeslagen zal zijn. De manier waarop de opgeslagen is bepaalt voor een
deel de bruikbaarheid en het gebruikers gemak. Daarnaast kan het EEPROM
natuurlijk ook node-specifieke data opslaan.

Idee-1:
    - Volgende link
    - Link, Node adres, gateway, node-ID (type), aantal sub-node adressen
    - Link, Node adres, gateway, node-ID (type), aantal sub-node adressen
    - Etc.

    De netwerk data staat in een gelinkte lijst, daardoor hoeft het record
    formaat niet een even aantal bytes te zijn.
    De gateway bestaat uit een bytes, de als die 0 = directe
    bereikbaarheid of een node-adres = indirecte bereikbaarheid.

    De eerste rij nodes zijn de direct bereikbare met laag zendvermogen,
    daarna komen de nodes die met meer vermogen gevonden zijn. Daarachter
    komen de nodes die via een slave node opgespoord zijn. Ook die worden
    in volgorde van bereikbaarheid opgeslagen.

    Het node-ID geeft het type node aan, en het aantal sub-node adressen
    geeft aan hoeveel devices via deze node benaderd kunnen worden.

    Voorbeeld: Een actuator node die ook een PIR-sensor bevat, of een
    433 MHz zender die meedere schakelaars aan stuurt...

    Het vullen van de NODE-data laat ik voor het gemak achterwege.

    ecreate LINK
    ecreate NODES ehere  link e,  link e!  8 eallot
    etc.


Idee-2:
    - Tabel met direkt adresseerbare (DIRECT) nodes (n byte)
    - Tabel met indirekt adresseerbare (GATEWAY) nodes (Twee bytes)
    - Elke tabel heeft twee schaduw tabellen met in de ene het node-ID (type)
      en in het andere het aantal aanwezige sub-node adressen op die node.

    Door de NODE data te verdelen over verschillende tabellen hoeft
    er minder data opgeslagen te worden. Deze info zit dan al in de keuze
    voor de gebruikte tabel.

    De GATEWAY nodes bevatten twee adres bytes, als eerste het bestemmings
    adres, de tweede byte bevat het GATEWAY node adres. Naar dat adres moet
    het pakket gestuurd worden.

    Als het pakket bij de GATEWAY aankomt en het is nog niet op de bestemming,
    dan gebruikt die node vervolgens zijn eigen GATEWAY tabel om het pakket
    de juiste richting op te sturen, tot het op de juiste plaats is...
    Als antwoord kan mogelijk een ACK-pakket terug gestuurd worden naar
    de originele afzender van dit pakket.

    value ACTUAL    \ Node die nu in gebruik is

    ecreate NODES   21 eallot      \ Alle gevonden nodes op een rijtje?

    ecreate DIRECT    11 eallot    \ Alle direkt adresseerbare nodes
    ecreate GATEWAY   21 eallot    \ Nodes die via een gateway bereikbaar zijn

    ecreate DIRECT-ID    11 eallot \ Node type, actuator, sensor, etc.
    ecreate GATEWAY-ID   11 eallot

    ecreate DIRECT-SUB   11 eallot \ Aantal sub-node adressen per node default=0
    ecreate GATEWAY-SUB  11 eallot



Slapende sensor node:
    Heeft niet meer nodig dan de bereikbare actieve nodes voor verbinding.

    value ACTUAL            \ Vrebindings node in gebruik
    ecreate NODES  9 eallot \ Lijst met alle mogelijk verbinding nodes
    create INFO    4 allot  \ Lijst met actuele sensor data
                            \ b.v. Status vlag, Batterij conditie, etc.



Afstandbediening node:
    Heeft een actuele lijst nodig van de bereikbare actieve nodes voor
    verbinding. Vanwege de verplaatsbaarheid naar een andere ruimte/verdieping.
    Voor het detecteren van verplaatsing moet een sensor ingebouwd zijn!

    value ACTUAL                \ Actuele verbindings node
    ecreate ALLNODES 21 eeallot \ Alle mogelijke actieve nodes
    create NODES  8 allot       \ Alle actieve nodes binnen bereik



    **** Niet van direct belang voor de DOMOTICA pakket gebruikers ****

Plattegronden in datastructuren:
    Voor het groeperen van nodes (die bij elkaar horen b.v. woonkamer)
    zijn datastructuren nodig. Door zo'n datastructuur worden de nodes
    virtueel met elkaar verbonden. Een voorbeeld:

    Woonkamer nodes :   1, 3, 7, 9, 12
    Slaapkamer nodes:   2, 3, 8, 11
    Keuken nodes:       4, 5, 10
    Achtertuin:         15, 16
    Etc.

    Voor het maken van plattegronden met accurate informatie over de nodes
    zijn datastructuren nodig. Daarin staan de x,y cordinatie van de nodes
    gecombineerd met de status van de nodes. Een voorbeeld, W staat voor
    woonkamer AT voor achtertuin:

    Node-nr, plattegrond, x-pos,  y-pos, status  node-type,  Sub-nodes.
        1         W         0      200     aan     Lamp          3  \ Vier lampen
        3         W        300      0      uit     Lamp          0
        7         W        500     150     uit   Rookmelder      0
       12         W        600     200     aan     Inbraak       1  \ Twee inbraak sensors
       15         AT        0      400     uit      PIR          1  \ Bewegings detector
       16         AT        0      800     uit      Spot         0  \ Floodlight
    etc.

    Met deze informatie kun je zowel met tekst, als grafisch een beeldscherm
    opbouwen. Zo is de terugkoppeling van de toestand van het alle ruimtes
    in het huis, en zelfs het gehele huis gemakkelijk af te beelden. Ook krijg
    je in het geval van de rookmelder of inbraak sensor onmiddelijk de juiste
    plaats door. Maar je kunt ook aanvullende groeperingingen maken voor b.v.
    een soort sensoren, etc.

    Mogelijk kan de groeperen van de nodes samengevoegd worden met de datatabel
    daaronder zodat  alles in n tabel per ruimte/functie ondergebracht wordt.
